package com.zjw.zy.service.helper;

import androidx.annotation.NonNull;

import com.tencent.cloud.qcloudasrsdk.filerecognize.QCloudFlashRecognizer;
import com.tencent.cloud.qcloudasrsdk.filerecognize.param.QCloudFlashRecognitionParams;
import remotecall.call.IRemoteCall;
import com.zjw.zy.constant.AppConstant;
import com.zjw.zy.utils.LogUtils;
import com.zjw.zy.utils.taskpool.TaskPool;

import org.json.JSONArray;
import org.json.JSONObject;

/**
 * @author ：zhong.jw
 * @date ：Created in 2022/10/18 16:08
 * <p>
 * 接入腾讯云语音接口
 */
public final class VoiceHelper extends BaseHelper {

    private static final String TAG = "VoiceHelper";

    private static volatile VoiceHelper instance;

    public static VoiceHelper getInstance() {
        if (instance == null) {
            synchronized (VoiceHelper.class) {
                if (instance == null) {
                    instance = new VoiceHelper();
                }
            }
        }
        return instance;
    }


    public void requestVoiceToText(String path, @NonNull IRemoteCall<String> call) {

        QCloudFlashRecognizer flashRecognizer = new QCloudFlashRecognizer(AppConstant.getTxAppId(), AppConstant.getTxSi(), AppConstant.getTxSk());

        flashRecognizer.setCallback((recognizer, result, exception) -> {
            try {
                JSONObject jsonObject = new JSONObject(result);
                JSONArray flash_result = jsonObject.optJSONArray("flash_result");
                JSONObject _result = (JSONObject) flash_result.get(0);
                call.call(_result.optString("text"));
            } catch (Exception e) {
                LogUtils.e(TAG, e.getMessage());
            }
        });


        QCloudFlashRecognitionParams params = (QCloudFlashRecognitionParams)
                QCloudFlashRecognitionParams.defaultRequestParams();
        //支持传音频文件数据或者音频文件路径，如果同时调用setData和setPath，sdk内将忽略setPath的值
        params.setPath(path); //支持100MB以内音频文件的识别
        params.setVoiceFormat("mp3"); //音频格式。支持 wav、pcm、ogg-opus、speex、silk、mp3、m4a、aac。

        //以下参数不设置将使用默认值
        params.setEngineModelType("16k_zh");//引擎模型类型,默认16k_zh。8k_zh：8k 中文普通话通用；16k_zh：16k 中文普通话通用；16k_zh_video：16k 音视频领域。
        params.setFilterDirty(0);// 0 ：默认状态 不过滤脏话 1：过滤脏话
        params.setFilterModal(0);// 0 ：默认状态 不过滤语气词  1：过滤部分语气词 2:严格过滤
        params.setFilterPunc(0);// 0 ：默认状态 不过滤句末的句号 1：滤句末的句号
        params.setConvertNumMode(1);//1：默认状态 根据场景智能转换为阿拉伯数字；0：全部转为中文数字。
        params.setSpeakerDiarization(0); //是否开启说话人分离（目前支持中文普通话引擎），默认为0，0：不开启，1：开启。
        params.setFirstChannelOnly(1); //是否只识别首个声道，默认为1。0：识别所有声道；1：识别首个声道。
        params.setWordInfo(0); //是否显示词级别时间戳，默认为0。0：不显示；1：显示，不包含标点时间戳，2：显示，包含标点时间戳。

        TaskPool.concurrent().post(() -> {
            try {
                flashRecognizer.recognize(params);
            } catch (Exception e) {
                LogUtils.e(TAG, e.getMessage());
            }
        });
    }
}
